package cn.djb.day29;

import java.util.Arrays;

/**
 * 把n个骰子扔在地上，所有骰子朝上一面的点数之和为s。输入n，打印出s的所有可能的值出现的概率。
 * <p>
 *  
 * <p>
 * 你需要用一个浮点数数组返回答案，其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
class Solution_3 {


    /**
     * 构建数据 dp[n][6n]
     * <p>
     * 结果 res(n) = Arrays.copyOfRange(dp[n],n,6n)
     *
     * @param n
     * @return
     */
    public double[] dicesProbability(int n) {
        double[] res = new double[6];
        //初始化
        Arrays.fill(res, 1.0 / 6.0);

        for (int i = 2; i <= n; i++) {
            double[] tmp = new double[5 * i + 1];
            for (int j = 0; j < res.length; j++) {
                for (int k = 0; k < 6; k++) {
                    tmp[j + k] += res[j] / 6.0;
                }

            }
            res = tmp;
        }


        return res;
    }
}